const express = require('express')
const Mongoose = require('mongoose')
const crypto = require('crypto-js')
const app = express()
// 静态服务器
app.use(express.static('./static'))
// 监听端口
app.listen(9999, function () {
    console.log('>>>>>service started on port 9999')
})
// 连接数据库
Mongoose.connect('mongodb://127.0.0.1:27017/loginRegister_demo', function () {
    console.log('>>>>>数据库连接成功！')
})
// 创建数据模型
const UserModel = Mongoose.model('UserModel', new Mongoose.Schema({
    id: String,
    password: String,
    phone: String,
    email: String,
    sex: '男' | '女' | '未知',
    age: Number,
    address: String,
    name: String,
    level: Number
}), 'user_info')
// 中间体拦截业务处理，数据接收完毕后，继续业务处理
app.use(express.json())
// 用户注册接口
app.post('/user/register', function (req, res) {
    UserModel.findOne({
        id: req.body.id
    }, (err, doc) => {
        if (!doc) {
            const user = new UserModel(req.body)
            user.save()
            res.send({
                code: 200,
                message: '注册成功！'
            })
        } else {
            res.send({
                code: 200,
                message: '用户编码已存在，可直接登录！'
            })
        }
    })
})
// 用户登录接口
app.post('/user/login', function (req, res) {
    UserModel.findOne({
        id: req.body.id
    }, (err, doc) => {
        if (!!err) {
            res.send({
                code: 500,
                message: 'service error'
            })
        } else {
            if (!doc) {
                res.send({
                    code: 300,
                    message: '用户编码不存在，请注册后登录！'
                })
            } else {
                let myPassword = crypto.MD5(doc.password).toString()
                if (myPassword === req.body.password) {
                    let token = crypto.AES.encrypt(req.body.password + '&&&' + Date.now() + '&&&' + Math.random(), 'jmx').toString()
                    UserModel.updateOne({
                        id: req.body.id
                    }, {
                        $set: {
                            token
                        }
                    }, err => {
                        if (!!err) {
                            res.send({
                                code: 500,
                                message: 'service error'
                            })
                        } else {
                            res.send({
                                code: 200,
                                message: '登录成功',
                                token
                            })
                        }
                    })
                } else {
                    res.send({
                        code: 300,
                        message: '用户密码输入错误！'
                    })
                }
            }
        }
    })
})
// 获取用户列表
app.get('/user/list', function (req, res) {
    UserModel.find((err, docs) => {
        res.send({
            code: 200,
            data: docs
        })
    })
})
// 删除用户数据
app.delete('/user/:id', function (req, res) {
    UserModel.deleteOne({
        id: req.params.id
    }, err => {
        if (!!err) {
            res.send({
                code: 500,
                message: ' 删除失败'
            })
        } else {
            res.send({
                code: 200,
            })
        }
    })
})